package com.moli.lumpSugar.common.interceptor;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;


/**
 * @program: LumpSugarChat
 * @description: 拦截器配置
 * @author: zhangjt
 * @create: 2024-10-24 14:21
 **/
/*
*
* **过滤器（Filter）和拦截器（Interceptor）**虽然都可以对请求进行预处理和后处理，但它们的工作方式和应用场景有所不同。以下是它们的区别：

1. 作用范围和位置
过滤器：通常在Web 容器（如 Servlet 容器）层面上工作，适用于 Servlet 请求生命周期。它可以拦截几乎所有的请求，包括静态资源请求（如图片、CSS）。
拦截器：在应用层（如 Spring 或 MyBatis）工作，通常用于拦截方法调用。它依赖于框架，不会拦截静态资源请求。
2. 使用场景和实现方式
过滤器：主要用于请求和响应的预处理和后处理，如进行权限检查、输入参数处理、编码转换等。通过 Filter 接口实现并配置在 web.xml 中，或者在 Spring Boot 中通过 @Component 注解注册。

拦截器：用于特定逻辑的切面式处理，如对 Controller 方法的访问权限控制、日志记录、事务管理等。通常通过实现框架的 HandlerInterceptor 接口来创建拦截器，主要在 Spring MVC 等框架中使用。

3. 生命周期
过滤器：只在容器启动时初始化一次，然后在容器范围内有效，不同请求会共享同一个过滤器实例。

拦截器：在每次请求时都会初始化并调用，因此拦截器的生命周期较短。每个请求通常有一个单独的拦截器实例。

4. 调用顺序
过滤器：在 DispatcherServlet 之前调用，过滤器可以改变请求或响应的内容。通常是应用中的第一个处理器。

拦截器：在 DispatcherServlet 之后，由框架管理，可以在 Controller 前、方法执行后、视图渲染后进行定制化的处理。

5. 示例
过滤器：适合处理跨领域的请求，如跨域请求、字符编码、权限验证等。

拦截器：更适合实现框架层的特定逻辑控制，比如 Spring MVC 的预处理、后处理和日志记录等。

总结
过滤器：更通用，适用于处理所有类型的请求。
拦截器：更专注于业务逻辑控制，通常绑定在框架特定的生命周期中。
* */
@Configuration
public class InterceptorConfig implements WebMvcConfigurer {
    @Autowired
    private CollectorInterceptor collectorInterceptor;
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(collectorInterceptor)
                .addPathPatterns("/sapi/**");
    }
}
